Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


RNS/Utilities/rnstatus.py bebf211b01c5c08fcd4b1bcdb2cadc773e2b5127 (bebf211b) Text, 41.03 KB

T8b949e#!/usr/bin/env python3

T8b949e# Reticulum License
T8b949e#
T8b949e# Copyright (c) 2016-2025 Mark Qvist
T8b949e#
T8b949e# Permission is hereby granted, free of charge, to any person obtaining a copy
T8b949e# of this software and associated documentation files (the "Software"), to deal
T8b949e# in the Software without restriction, including without limitation the rights
T8b949e# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
T8b949e# copies of the Software, and to permit persons to whom the Software is
T8b949e# furnished to do so, subject to the following conditions:
T8b949e#
T8b949e# - The Software shall not be used in any kind of system which includes amongst
T8b949e# its functions the ability to purposefully do harm to human beings.
T8b949e#
T8b949e# - The Software shall not be used, directly or indirectly, in the creation of
T8b949e# an artificial intelligence, machine learning or language model training
T8b949e# dataset, including but not limited to any use that contributes to the
T8b949e# training or development of such a model or algorithm.
T8b949e#
T8b949e# - The above copyright notice and this permission notice shall be included in
T8b949e# all copies or substantial portions of the Software.
T8b949e#
T8b949e# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
T8b949e# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
T8b949e# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
T8b949e# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
T8b949e# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
T8b949e# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
T8b949e# SOFTWARE.

Tff7b72import T7ee787RNS
Tff7b72import T7ee787os
Tff7b72import T7ee787sys
Tff7b72import T7ee787time
Tff7b72import T7ee787argparse
Tff7b72import T7ee787io

Tff7b72from T7ee787RNST7ee787.T7ee787_version Tff7b72import Te6edf3__version__

Tff7b72def Td2a8ffsize_strTb4b4b4(Te6edf3numTb4b4b4, Te6edf3suffixTff7b72=Ta5d6ff'Ta5d6ffBTa5d6ff'Tb4b4b4)Tb4b4b4:
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffKTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'

Tff7b72if Te6edf3suffix Tff7b72== Ta5d6ff'Ta5d6ffbTa5d6ff'Tb4b4b4:
Te6edf3num Tff7b72*Tff7b72= T79c0ff8
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffKTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'

Tff7b72for Te6edf3unit Tff7b72in Te6edf3unitsTb4b4b4:
Tff7b72if Tffa657absTb4b4b4(Te6edf3numTb4b4b4) Tff7b72< T79c0ff1000.0Tb4b4b4:
Tff7b72if Te6edf3unit Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Tffd700%.0fTa5d6ff Tffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3unitTb4b4b4, Te6edf3suffixTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Tffd700%.2fTa5d6ff Tffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3unitTb4b4b4, Te6edf3suffixTb4b4b4)
Te6edf3num Tff7b72/Tff7b72= T79c0ff1000.0

Tff7b72return Ta5d6ff"Tffd700%.2fTffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3last_unitTb4b4b4, Te6edf3suffixTb4b4b4)

Te6edf3request_result Tff7b72= Tff7b72None
Te6edf3request_concluded Tff7b72= Tff7b72False
Te6edf3first_remote_req Tff7b72= Tff7b72True
Te6edf3remote_destination Tff7b72= Tff7b72None
Te6edf3remote_link Tff7b72= Tff7b72None
Tff7b72def Td2a8ffget_remote_statusTb4b4b4(Te6edf3destination_hashTb4b4b4, Te6edf3include_lstatsTb4b4b4, Te6edf3identityTb4b4b4, Te6edf3no_outputTff7b72=Tff7b72FalseTb4b4b4, Te6edf3timeoutTff7b72=Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffPATH_REQUEST_TIMEOUTTb4b4b4)Tb4b4b4:
Tff7b72global Te6edf3request_resultTb4b4b4, Te6edf3request_concludedTb4b4b4, Te6edf3first_remote_reqTb4b4b4, Te6edf3remote_destinationTb4b4b4, Te6edf3remote_link
Te6edf3link_count Tff7b72= Tff7b72None

Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3no_outputTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffPath to Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff requestedTa5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)
Te6edf3pr_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72while Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3pr_time Tff7b72> Te6edf3timeoutTb4b4b4:
Tff7b72if Tff7b72not Te6edf3no_outputTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\rTa5d6ff Tffea00\rTa5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffPath request timed outTa5d6ff"Tb4b4b4)
Te6edf3exitTb4b4b4(T79c0ff12Tb4b4b4)

Te6edf3remote_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3destination_hashTb4b4b4)

Tff7b72def Td2a8ffremote_link_closedTb4b4b4(Te6edf3linkTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3linkTff7b72.Td2a8ffteardown_reason Tff7b72== Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffINITIATOR_CLOSEDTb4b4b4: Tff7b72return
Tff7b72elif Te6edf3linkTff7b72.Td2a8ffteardown_reason Tff7b72== Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffTIMEOUTTb4b4b4:
Tff7b72if Tff7b72not Te6edf3no_outputTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\rTa5d6ff Tffea00\rTa5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffThe link timed out, exiting nowTa5d6ff"Tb4b4b4)
Tff7b72elif Te6edf3linkTff7b72.Td2a8ffteardown_reason Tff7b72== Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffDESTINATION_CLOSEDTb4b4b4:
Tff7b72if Tff7b72not Te6edf3no_outputTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\rTa5d6ff Tffea00\rTa5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffThe link was closed by the server, exiting nowTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72not Te6edf3no_outputTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\rTa5d6ff Tffea00\rTa5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffLink closed unexpectedly, exiting nowTa5d6ff"Tb4b4b4)
Te6edf3exitTb4b4b4(T79c0ff10Tb4b4b4)

Tff7b72def Td2a8ffrequest_failedTb4b4b4(Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Tff7b72global Te6edf3request_resultTb4b4b4, Te6edf3request_concluded
Tff7b72if Tff7b72not Te6edf3no_outputTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\rTa5d6ff Tffea00\rTa5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffThe remote status request failed. Likely authentication failure.Ta5d6ff"Tb4b4b4)
Te6edf3request_concluded Tff7b72= Tff7b72True

Tff7b72def Td2a8ffgot_responseTb4b4b4(Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Tff7b72global Te6edf3request_resultTb4b4b4, Te6edf3request_concluded
Te6edf3response Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponse
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3responseTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Te6edf3status Tff7b72= Te6edf3responseTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3responseTb4b4b4) Tff7b72> T79c0ff1Tb4b4b4: Te6edf3link_count Tff7b72= Te6edf3responseTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72elseTb4b4b4: Te6edf3link_count Tff7b72= Tff7b72None

Te6edf3request_result Tff7b72= Tb4b4b4(Te6edf3statusTb4b4b4, Te6edf3link_countTb4b4b4)

Te6edf3request_concluded Tff7b72= Tff7b72True

Tff7b72def Td2a8ffremote_link_establishedTb4b4b4(Te6edf3linkTb4b4b4)Tb4b4b4:
Tff7b72global Te6edf3first_remote_req
Tff7b72if Tff7b72not Te6edf3no_output Tff7b72and Te6edf3first_remote_reqTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\rTa5d6ff Tffea00\rTa5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffSending request...Ta5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)
Te6edf3linkTff7b72.Td2a8ffidentifyTb4b4b4(Te6edf3identityTb4b4b4)
Te6edf3linkTff7b72.Td2a8ffrequestTb4b4b4(Ta5d6ff"Ta5d6ff/statusTa5d6ff"Tb4b4b4, Te6edf3data Tff7b72= Tb4b4b4[Te6edf3include_lstatsTb4b4b4]Tb4b4b4, Te6edf3response_callback Tff7b72= Te6edf3got_responseTb4b4b4, Te6edf3failed_callback Tff7b72= Te6edf3request_failedTb4b4b4)
Te6edf3first_remote_req Tff7b72= Tff7b72False

Tff7b72if Tff7b72not Te6edf3remote_link Tff7b72and Tff7b72not Te6edf3no_outputTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\rTa5d6ff Tffea00\rTa5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffEstablishing link with remote transport instance...Ta5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)

Tff7b72if Tff7b72not Te6edf3remote_destinationTb4b4b4:
Te6edf3remote_destination Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Te6edf3remote_identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Ta5d6ff"Ta5d6ffrnstransportTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffremoteTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmanagementTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3remote_link Tff7b72and Te6edf3remote_linkTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffACTIVETb4b4b4:
Te6edf3request_concluded Tff7b72= Tff7b72False
Te6edf3remote_linkTff7b72.Td2a8ffrequestTb4b4b4(Ta5d6ff"Ta5d6ff/statusTa5d6ff"Tb4b4b4, Te6edf3data Tff7b72= Tb4b4b4[Te6edf3include_lstatsTb4b4b4]Tb4b4b4, Te6edf3response_callback Tff7b72= Te6edf3got_responseTb4b4b4, Te6edf3failed_callback Tff7b72= Te6edf3request_failedTb4b4b4)

Tff7b72elseTb4b4b4:
Te6edf3remote_link Tff7b72= Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4(Te6edf3remote_destinationTb4b4b4)
Te6edf3remote_linkTff7b72.Td2a8ffset_link_established_callbackTb4b4b4(Te6edf3remote_link_establishedTb4b4b4)
Te6edf3remote_linkTff7b72.Td2a8ffset_link_closed_callbackTb4b4b4(Te6edf3remote_link_closedTb4b4b4)

Tff7b72while Tff7b72not Te6edf3request_concludedTb4b4b4: Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)

Tff7b72if Te6edf3request_result Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\rTa5d6ff Tffea00\rTa5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)

Tff7b72return Te6edf3request_result

Tff7b72def Td2a8ffprogram_setupTb4b4b4(Te6edf3configdirTb4b4b4, Te6edf3dispallTff7b72=Tff7b72FalseTb4b4b4, Te6edf3verbosityTff7b72=T79c0ff0Tb4b4b4, Te6edf3name_filterTff7b72=Tff7b72NoneTb4b4b4, Te6edf3jsonTff7b72=Tff7b72FalseTb4b4b4, Te6edf3astatsTff7b72=Tff7b72FalseTb4b4b4, Te6edf3pstatsTff7b72=Tff7b72FalseTb4b4b4, Te6edf3lstatsTff7b72=Tff7b72FalseTb4b4b4, Te6edf3sortingTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3sort_reverseTff7b72=Tff7b72FalseTb4b4b4, Te6edf3remoteTff7b72=Tff7b72NoneTb4b4b4, Te6edf3management_identityTff7b72=Tff7b72NoneTb4b4b4, Te6edf3remote_timeoutTff7b72=Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffPATH_REQUEST_TIMEOUTTb4b4b4, Te6edf3must_exitTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3rns_instanceTff7b72=Tff7b72NoneTb4b4b4, Te6edf3traffic_totalsTff7b72=Tff7b72FalseTb4b4b4, Te6edf3discovered_interfacesTff7b72=Tff7b72FalseTb4b4b4, Te6edf3config_entriesTff7b72=Tff7b72FalseTb4b4b4, Te6edf3burst_filterTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3remoteTb4b4b4: Te6edf3require_shared Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4: Te6edf3require_shared Tff7b72= Tff7b72True

Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3rns_instanceTb4b4b4:
Te6edf3reticulum Tff7b72= Te6edf3rns_instance
Te6edf3must_exit Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Te6edf3reticulum Tff7b72= Te6edf3RNSTff7b72.Td2a8ffReticulumTb4b4b4(Te6edf3configdirTff7b72=Te6edf3configdirTb4b4b4, Te6edf3loglevelTff7b72=T79c0ff3Tff7b72+Te6edf3verbosityTb4b4b4, Te6edf3require_shared_instanceTff7b72=Te6edf3require_sharedTb4b4b4)

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffNo shared RNS instance available to get status fromTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3must_exitTb4b4b4: Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72return

Te6edf3link_count Tff7b72= Tff7b72None
Te6edf3stats Tff7b72= Tff7b72None

Te6edf3details Tff7b72= Tff7b72False
Tff7b72if Te6edf3config_entriesTb4b4b4:
Te6edf3discovered_interfaces Tff7b72= Tff7b72True
Te6edf3details Tff7b72= Tff7b72True

Tff7b72if Te6edf3discovered_interfacesTb4b4b4:
Te6edf3if_discovery Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDiscoveryTff7b72.Td2a8ffInterfaceDiscoveryTb4b4b4(Te6edf3discover_interfacesTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3ifs Tff7b72= Te6edf3if_discoveryTff7b72.Td2a8fflist_discovered_interfacesTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)

Tff7b72if Te6edf3jsonTb4b4b4:
Tff7b72import T7ee787json
Tff7b72for Te6edf3i Tff7b72in Te6edf3ifsTb4b4b4:
Tff7b72for Te6edf3e Tff7b72in Te6edf3iTb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3iTb4b4b4[Te6edf3eTb4b4b4]Tb4b4b4, Tffa657bytesTb4b4b4)Tb4b4b4: Te6edf3iTb4b4b4[Te6edf3eTb4b4b4] Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3iTb4b4b4[Te6edf3eTb4b4b4]Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
Tffa657printTb4b4b4(Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Te6edf3ifsTb4b4b4)Tb4b4b4)

Tff7b72elseTb4b4b4:
Te6edf3filtered_ifs Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3i Tff7b72in Te6edf3ifsTb4b4b4:
Te6edf3name Tff7b72= Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72not Te6edf3name_filter Tff7b72or Te6edf3name_filterTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72in Te6edf3nameTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3filtered_ifsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3iTb4b4b4)
Tff7b72if Te6edf3detailsTb4b4b4:
Tff7b72for Te6edf3idxTb4b4b4, Te6edf3i Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3filtered_ifsTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3name Tff7b72= Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]
Te6edf3if_type Tff7b72= Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4]
Te6edf3status Tff7b72= Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4]

Tff7b72if Te6edf3status Tff7b72== Ta5d6ff"Ta5d6ffavailableTa5d6ff"Tb4b4b4: Te6edf3status_display Tff7b72= Ta5d6ff"Ta5d6ffAvailableTa5d6ff"
Tff7b72elif Te6edf3status Tff7b72== Ta5d6ff"Ta5d6ffunknownTa5d6ff"Tb4b4b4: Te6edf3status_display Tff7b72= Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Tff7b72elif Te6edf3status Tff7b72== Ta5d6ff"Ta5d6ffstaleTa5d6ff"Tb4b4b4: Te6edf3status_display Tff7b72= Ta5d6ff"Ta5d6ffStaleTa5d6ff"
Tff7b72elseTb4b4b4: Te6edf3status_display Tff7b72= Te6edf3status

Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3dago Tff7b72= Te6edf3nowTff7b72-Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffdiscoveredTa5d6ff"Tb4b4b4]
Te6edf3hago Tff7b72= Te6edf3nowTff7b72-Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fflast_heardTa5d6ff"Tb4b4b4]
Te6edf3discovered_display Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3dagoTb4b4b4, Te6edf3compactTff7b72=Tff7b72TrueTb4b4b4)Tffd700}Ta5d6ff agoTa5d6ff"
Te6edf3last_heard_display Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3hagoTb4b4b4, Te6edf3compactTff7b72=Tff7b72TrueTb4b4b4)Tffd700}Ta5d6ff agoTa5d6ff"
Te6edf3transport_str Tff7b72= Ta5d6ff"Ta5d6ffEnabledTa5d6ff" Tff7b72if Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fftransportTa5d6ff"Tb4b4b4] Tff7b72else Ta5d6ff"Ta5d6ffDisabledTa5d6ff"

Tff7b72if Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3lat Tff7b72= Tffa657roundTb4b4b4(Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]Tb4b4b4, T79c0ff4Tb4b4b4)
Te6edf3lon Tff7b72= Tffa657roundTb4b4b4(Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]Tb4b4b4, T79c0ff4Tb4b4b4)
Tff7b72if Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffheightTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4: Te6edf3height Tff7b72= Ta5d6ff"Ta5d6ff, Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffheightTa5d6ff"Tb4b4b4]Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ffm hTa5d6ff"
Tff7b72elseTb4b4b4: Te6edf3height Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3location Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3latTffd700}Ta5d6ff, Tffd700{Te6edf3lonTffd700}Tffd700{Te6edf3heightTffd700}Ta5d6ff"
Tff7b72elseTb4b4b4: Te6edf3location Tff7b72= Ta5d6ff"Ta5d6ffUnknownTa5d6ff"

Te6edf3transport_id Tff7b72= Tff7b72None
Te6edf3network Tff7b72= Tff7b72None
Tff7b72if Ta5d6ff"Ta5d6fftransport_idTa5d6ff" Tff7b72in Te6edf3iTb4b4b4: Te6edf3transport_id Tff7b72= Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fftransport_idTa5d6ff"Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6fftransport_idTa5d6ff" Tff7b72in Te6edf3i Tff7b72and Ta5d6ff"Ta5d6ffnetwork_idTa5d6ff" Tff7b72in Te6edf3i Tff7b72and Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fftransport_idTa5d6ff"Tb4b4b4] Tff7b72!= Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffnetwork_idTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3network Tff7b72= Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffnetwork_idTa5d6ff"Tb4b4b4]

Tff7b72if Te6edf3idx Tff7b72> T79c0ff0Tb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tff7b72+Ta5d6ff"Ta5d6ff=Ta5d6ff"Tff7b72*T79c0ff32Tff7b72+Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3networkTb4b4b4: Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffNetwork ID : Tffd700{Te6edf3networkTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3transport_idTb4b4b4: Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffTransport ID : Tffd700{Te6edf3transport_idTffd700}Ta5d6ff"Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffName : Tffd700{Te6edf3nameTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffType : Tffd700{Te6edf3if_typeTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffStatus : Tffd700{Te6edf3status_displayTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffTransport : Tffd700{Te6edf3transport_strTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffDistance : Tffd700{Te6edf3iTb4b4b4[Ta5d6ff'Ta5d6ffhopsTa5d6ff'Tb4b4b4]Tffd700}Ta5d6ff hopTffd700{Ta5d6ff'Ta5d6ff' Tff7b72if Te6edf3iTb4b4b4[Ta5d6ff'Ta5d6ffhopsTa5d6ff'Tb4b4b4] Tff7b72== T79c0ff1 Tff7b72else Ta5d6ff'Ta5d6ffsTa5d6ff'Tffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffDiscovered : Tffd700{Te6edf3discovered_displayTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffLast Heard : Tffd700{Te6edf3last_heard_displayTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffLocation : Tffd700{Te6edf3locationTffd700}Ta5d6ff"Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6fffrequencyTa5d6ff" Tff7b72in Te6edf3iTb4b4b4: Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffFrequency : Tffd700{Te6edf3iTb4b4b4[Ta5d6ff'Ta5d6fffrequencyTa5d6ff'Tb4b4b4]Tffd700:Ta5d6ff,Tffd700}Ta5d6ff HzTa5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffbandwidthTa5d6ff" Tff7b72in Te6edf3iTb4b4b4: Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffBandwidth : Tffd700{Te6edf3iTb4b4b4[Ta5d6ff'Ta5d6ffbandwidthTa5d6ff'Tb4b4b4]Tffd700:Ta5d6ff,Tffd700}Ta5d6ff HzTa5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffsfTa5d6ff" Tff7b72in Te6edf3iTb4b4b4: Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSprd. Factor : Tffd700{Te6edf3iTb4b4b4[Ta5d6ff'Ta5d6ffsfTa5d6ff'Tb4b4b4]Tffd700}Ta5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffcrTa5d6ff" Tff7b72in Te6edf3iTb4b4b4: Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCoding Rate : Tffd700{Te6edf3iTb4b4b4[Ta5d6ff'Ta5d6ffcrTa5d6ff'Tb4b4b4]Tffd700}Ta5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffmodulationTa5d6ff" Tff7b72in Te6edf3iTb4b4b4: Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffModulation : Tffd700{Te6edf3iTb4b4b4[Ta5d6ff'Ta5d6ffmodulationTa5d6ff'Tb4b4b4]Tffd700}Ta5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffreachable_onTa5d6ff" Tff7b72in Te6edf3iTb4b4b4: Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAddress : Tffd700{Te6edf3iTb4b4b4[Ta5d6ff'Ta5d6ffreachable_onTa5d6ff'Tb4b4b4]Tffd700}Ta5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffportTa5d6ff" Tff7b72in Te6edf3iTb4b4b4: Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffPort : Tffd700{Te6edf3iTb4b4b4[Ta5d6ff'Ta5d6ffportTa5d6ff'Tb4b4b4]Tffd700}Ta5d6ff"Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffStamp Value : Tffd700{Te6edf3iTb4b4b4[Ta5d6ff'Ta5d6ffvalueTa5d6ff'Tb4b4b4]Tffd700}Ta5d6ff"Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffea00\nTa5d6ffConfiguration Entry:Ta5d6ff"Tb4b4b4)
Te6edf3config_lines Tff7b72= Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffconfig_entryTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Tffea00\nTa5d6ff'Tb4b4b4)
Tff7b72for Te6edf3line Tff7b72in Te6edf3config_linesTb4b4b4: Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff Tffd700{Te6edf3lineTffd700}Ta5d6ff"Tb4b4b4)

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Ta5d6ff'Ta5d6ffNameTa5d6ff'Tffd700:Ta5d6ff<25Tffd700}Ta5d6ff Tffd700{Ta5d6ff'Ta5d6ffTypeTa5d6ff'Tffd700:Ta5d6ff<12Tffd700}Ta5d6ff Tffd700{Ta5d6ff'Ta5d6ffStatusTa5d6ff'Tffd700:Ta5d6ff<12Tffd700}Ta5d6ff Tffd700{Ta5d6ff'Ta5d6ffLast HeardTa5d6ff'Tffd700:Ta5d6ff<12Tffd700}Ta5d6ff Tffd700{Ta5d6ff'Ta5d6ffValueTa5d6ff'Tffd700:Ta5d6ff<8Tffd700}Ta5d6ff Tffd700{Ta5d6ff'Ta5d6ffLocationTa5d6ff'Tffd700:Ta5d6ff<15Tffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff-Ta5d6ff" Tff7b72* T79c0ff89Tb4b4b4)
Tff7b72for Te6edf3i Tff7b72in Te6edf3filtered_ifsTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3name Tff7b72= Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tb4b4b4[Tb4b4b4:T79c0ff24Tb4b4b4] Tff7b72+ Ta5d6ff"Ta5d6ff…Ta5d6ff" Tff7b72if Tffa657lenTb4b4b4(Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72> T79c0ff24 Tff7b72else Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]
Te6edf3if_type Tff7b72= Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ffInterfaceTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3status Tff7b72= Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3status Tff7b72== Ta5d6ff"Ta5d6ffavailableTa5d6ff"Tb4b4b4: Te6edf3status_display Tff7b72= Ta5d6ff"Ta5d6ff✓ AvailableTa5d6ff"
Tff7b72elif Te6edf3status Tff7b72== Ta5d6ff"Ta5d6ffunknownTa5d6ff"Tb4b4b4: Te6edf3status_display Tff7b72= Ta5d6ff"Ta5d6ff? UnknownTa5d6ff"
Tff7b72elif Te6edf3status Tff7b72== Ta5d6ff"Ta5d6ffstaleTa5d6ff"Tb4b4b4: Te6edf3status_display Tff7b72= Ta5d6ff"Ta5d6ff× StaleTa5d6ff"
Tff7b72elseTb4b4b4: Te6edf3status_display Tff7b72= Te6edf3status
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3last_heard Tff7b72= Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fflast_heardTa5d6ff"Tb4b4b4]
Te6edf3diff Tff7b72= Te6edf3now Tff7b72- Te6edf3last_heard
Tff7b72if Te6edf3diff Tff7b72< T79c0ff60Tb4b4b4: Te6edf3last_heard_display Tff7b72= Ta5d6ff"Ta5d6ffJust nowTa5d6ff"
Tff7b72elif Te6edf3diff Tff7b72< T79c0ff3600Tb4b4b4:
Te6edf3mins Tff7b72= Tffa657intTb4b4b4(Te6edf3diff Tff7b72/ T79c0ff60Tb4b4b4)
Te6edf3last_heard_display Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3minsTffd700}Ta5d6ffm agoTa5d6ff"
Tff7b72elif Te6edf3diff Tff7b72< T79c0ff86400Tb4b4b4:
Te6edf3hours Tff7b72= Tffa657intTb4b4b4(Te6edf3diff Tff7b72/ T79c0ff3600Tb4b4b4)
Te6edf3last_heard_display Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3hoursTffd700}Ta5d6ffh agoTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3days Tff7b72= Tffa657intTb4b4b4(Te6edf3diff Tff7b72/ T79c0ff86400Tb4b4b4)
Te6edf3last_heard_display Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3daysTffd700}Ta5d6ffd agoTa5d6ff"
Te6edf3value Tff7b72= Tffa657strTb4b4b4(Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffvalueTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3lat Tff7b72= Tffa657roundTb4b4b4(Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]Tb4b4b4, T79c0ff4Tb4b4b4)
Te6edf3lon Tff7b72= Tffa657roundTb4b4b4(Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]Tb4b4b4, T79c0ff4Tb4b4b4)
Te6edf3location Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3latTffd700}Ta5d6ff, Tffd700{Te6edf3lonTffd700}Ta5d6ff"
Tff7b72elseTb4b4b4: Te6edf3location Tff7b72= Ta5d6ff"Ta5d6ffN/ATa5d6ff"
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3nameTffd700:Ta5d6ff<25Tffd700}Ta5d6ff Tffd700{Te6edf3if_typeTffd700:Ta5d6ff<12Tffd700}Ta5d6ff Tffd700{Te6edf3status_displayTffd700:Ta5d6ff<12Tffd700}Ta5d6ff Tffd700{Te6edf3last_heard_displayTffd700:Ta5d6ff<12Tffd700}Ta5d6ff Tffd700{Te6edf3valueTffd700:Ta5d6ff<8Tffd700}Ta5d6ff Tffd700{Te6edf3locationTffd700:Ta5d6ff<15Tffd700}Ta5d6ff"Tb4b4b4)

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass

Tff7b72if Te6edf3must_exitTb4b4b4: Te6edf3exitTb4b4b4(T79c0ff0Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72return

Tff7b72if Te6edf3remoteTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3management_identity Tff7b72is Tff7b72NoneTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffRemote management requires an identity file. Use -i to specify the path to a management identity.Ta5d6ff"Tb4b4b4)

Te6edf3dest_len Tff7b72= Tb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4)Tff7b72*T79c0ff2
Tff7b72if Tffa657lenTb4b4b4(Te6edf3remoteTb4b4b4) Tff7b72!= Te6edf3dest_lenTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffDestination length is invalid, must be Tffd700{hex}Ta5d6ff hexadecimal characters (Tffd700{byte}Ta5d6ff bytes).Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Tffa657hexTff7b72=Te6edf3dest_lenTb4b4b4, Te6edf3byteTff7b72=Te6edf3dest_lenTff7b72/Tff7b72/T79c0ff2Tb4b4b4)Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3identity_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3remoteTb4b4b4)
Te6edf3destination_hash Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffhash_from_name_and_identityTb4b4b4(Ta5d6ff"Ta5d6ffrnstransport.remote.managementTa5d6ff"Tb4b4b4, Te6edf3identity_hashTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffInvalid destination entered. Check your input.Ta5d6ff"Tb4b4b4)

Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffrom_fileTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexpanduserTb4b4b4(Te6edf3management_identityTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3identity Tff7b72== Tff7b72NoneTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffCould not load management identity from Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3management_identityTb4b4b4)Tb4b4b4)

Tff7b72tryTb4b4b4:
Te6edf3remote_status Tff7b72= Te6edf3get_remote_statusTb4b4b4(Te6edf3destination_hashTb4b4b4, Te6edf3lstatsTb4b4b4, Te6edf3identityTb4b4b4, Te6edf3no_outputTff7b72=Te6edf3jsonTb4b4b4, Te6edf3timeoutTff7b72=Te6edf3remote_timeoutTb4b4b4)
Tff7b72if Te6edf3remote_status Tff7b72!= Tff7b72NoneTb4b4b4: Te6edf3statsTb4b4b4, Te6edf3link_count Tff7b72= Te6edf3remote_status
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72raise Te6edf3e
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tffa657printTb4b4b4(Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3must_exitTb4b4b4: Te6edf3exitTb4b4b4(T79c0ff20Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72return

Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3lstatsTb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3link_count Tff7b72= Te6edf3reticulumTff7b72.Td2a8ffget_link_countTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72pass

Tff7b72tryTb4b4b4: Te6edf3stats Tff7b72= Te6edf3reticulumTff7b72.Td2a8ffget_interface_statsTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72pass

Tff7b72if Te6edf3stats Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3jsonTb4b4b4:
Tff7b72import T7ee787json
Tff7b72for Te6edf3s Tff7b72in Te6edf3statsTb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3statsTb4b4b4[Te6edf3sTb4b4b4]Tb4b4b4, Tffa657bytesTb4b4b4)Tb4b4b4:
Te6edf3statsTb4b4b4[Te6edf3sTb4b4b4] Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3statsTb4b4b4[Te6edf3sTb4b4b4]Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)

Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3statsTb4b4b4[Te6edf3sTb4b4b4]Tb4b4b4, Tffa657dictTb4b4b4) Tff7b72or Tffa657isinstanceTb4b4b4(Te6edf3statsTb4b4b4[Te6edf3sTb4b4b4]Tb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3i Tff7b72in Te6edf3statsTb4b4b4[Te6edf3sTb4b4b4]Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3iTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3k Tff7b72in Te6edf3iTb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3iTb4b4b4[Te6edf3kTb4b4b4]Tb4b4b4, Tffa657bytesTb4b4b4)Tb4b4b4:
Te6edf3iTb4b4b4[Te6edf3kTb4b4b4] Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3iTb4b4b4[Te6edf3kTb4b4b4]Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)

Tffa657printTb4b4b4(Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Te6edf3statsTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3must_exitTb4b4b4: Te6edf3exitTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72return

Te6edf3interfaces Tff7b72= Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6ffinterfacesTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3sorting Tff7b72!= Tff7b72None Tff7b72and Tffa657isinstanceTb4b4b4(Te6edf3sortingTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Te6edf3sorting Tff7b72= Te6edf3sortingTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6ffrateTa5d6ff" Tff7b72or Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6ffbitrateTa5d6ff"Tb4b4b4:
Te6edf3interfacesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3iTb4b4b4: Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffbitrateTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72not Te6edf3sort_reverseTb4b4b4)
Tff7b72if Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6ffrxTa5d6ff"Tb4b4b4:
Te6edf3interfacesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3iTb4b4b4: Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffrxbTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72not Te6edf3sort_reverseTb4b4b4)
Tff7b72if Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6fftxTa5d6ff"Tb4b4b4:
Te6edf3interfacesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3iTb4b4b4: Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fftxbTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72not Te6edf3sort_reverseTb4b4b4)
Tff7b72if Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6ffrxsTa5d6ff"Tb4b4b4:
Te6edf3interfacesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3iTb4b4b4: Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffrxsTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72not Te6edf3sort_reverseTb4b4b4)
Tff7b72if Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6fftxsTa5d6ff"Tb4b4b4:
Te6edf3interfacesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3iTb4b4b4: Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fftxsTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72not Te6edf3sort_reverseTb4b4b4)
Tff7b72if Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6fftrafficTa5d6ff"Tb4b4b4:
Te6edf3interfacesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3iTb4b4b4: Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffrxbTa5d6ff"Tb4b4b4]Tff7b72+Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6fftxbTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72not Te6edf3sort_reverseTb4b4b4)
Tff7b72if Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6ffannouncesTa5d6ff" Tff7b72or Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6ffannounceTa5d6ff"Tb4b4b4:
Te6edf3interfacesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3iTb4b4b4: Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffincoming_announce_frequencyTa5d6ff"Tb4b4b4]Tff7b72+Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffoutgoing_announce_frequencyTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72not Te6edf3sort_reverseTb4b4b4)
Tff7b72if Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6ffarxTa5d6ff"Tb4b4b4:
Te6edf3interfacesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3iTb4b4b4: Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffincoming_announce_frequencyTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72not Te6edf3sort_reverseTb4b4b4)
Tff7b72if Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6ffatxTa5d6ff"Tb4b4b4:
Te6edf3interfacesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3iTb4b4b4: Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffoutgoing_announce_frequencyTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72not Te6edf3sort_reverseTb4b4b4)
Tff7b72if Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6ffprxTa5d6ff"Tb4b4b4:
Te6edf3interfacesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3iTb4b4b4: Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffincoming_pr_frequencyTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72not Te6edf3sort_reverseTb4b4b4)
Tff7b72if Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6ffptxTa5d6ff"Tb4b4b4:
Te6edf3interfacesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3iTb4b4b4: Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffoutgoing_pr_frequencyTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72not Te6edf3sort_reverseTb4b4b4)
Tff7b72if Te6edf3sorting Tff7b72== Ta5d6ff"Ta5d6ffheldTa5d6ff"Tb4b4b4:
Te6edf3interfacesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3iTb4b4b4: Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffheld_announcesTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72not Te6edf3sort_reverseTb4b4b4)

Tff7b72for Te6edf3ifstat Tff7b72in Te6edf3interfacesTb4b4b4:
Te6edf3name Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]

Tff7b72if Te6edf3dispall Tff7b72or Tff7b72not Tb4b4b4(
Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffLocalInterface[Ta5d6ff"Tb4b4b4) Tff7b72or
Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffTCPInterface[ClientTa5d6ff"Tb4b4b4) Tff7b72or
Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffBackboneInterface[Client onTa5d6ff"Tb4b4b4) Tff7b72or
Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffAutoInterfacePeer[Ta5d6ff"Tb4b4b4) Tff7b72or
Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffWeaveInterfacePeer[Ta5d6ff"Tb4b4b4) Tff7b72or
Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffI2PInterfacePeer[Connected peerTa5d6ff"Tb4b4b4) Tff7b72or
Tb4b4b4(Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffI2PInterface[Ta5d6ff"Tb4b4b4) Tff7b72and Tb4b4b4(Ta5d6ff"Ta5d6ffi2p_connectableTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffi2p_connectableTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72FalseTb4b4b4)Tb4b4b4)
Tb4b4b4)Tb4b4b4:

Tff7b72if Tff7b72not Tb4b4b4(Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffI2PInterface[Ta5d6ff"Tb4b4b4) Tff7b72and Tb4b4b4(Ta5d6ff"Ta5d6ffi2p_connectableTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffi2p_connectableTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72FalseTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3name_filter Tff7b72== Tff7b72None Tff7b72and Te6edf3burst_filter Tff7b72== Tff7b72NoneTb4b4b4: Te6edf3show_if Tff7b72= Tff7b72True
Tff7b72elif Tff7b72not Te6edf3burst_filterTb4b4b4:
Tff7b72if Tff7b72not Te6edf3name_filter Tff7b72or Te6edf3name_filterTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72in Te6edf3nameTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3show_if Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4: Te6edf3show_if Tff7b72= Tff7b72False
Tff7b72elif Te6edf3burst_filterTb4b4b4:
Te6edf3burst_act Tff7b72= Tff7b72True Tff7b72if Tb4b4b4(Ta5d6ff"Ta5d6ffburst_activeTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Ta5d6ff"Ta5d6ffpr_burst_activeTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4) Tff7b72and Tb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffburst_activeTa5d6ff"Tb4b4b4] Tff7b72or Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffpr_burst_activeTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72else Tff7b72False
Te6edf3nfilt Tff7b72= Te6edf3name_filterTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72in Te6edf3nameTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72if Te6edf3name_filter Tff7b72else Tff7b72False
Tff7b72if Te6edf3burst_act Tff7b72or Te6edf3nfiltTb4b4b4: Te6edf3show_if Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4: Te6edf3show_if Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4: Te6edf3show_if Tff7b72= Tff7b72True

Tff7b72if Te6edf3show_ifTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)

Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4]Tb4b4b4: Te6edf3ss Tff7b72= Ta5d6ff"Ta5d6ffUpTa5d6ff"
Tff7b72elseTb4b4b4: Te6edf3ss Tff7b72= Ta5d6ff"Ta5d6ffDownTa5d6ff"

Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINTTb4b4b4: Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffAccess PointTa5d6ff"
Tff7b72elif Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_POINT_TO_POINTTb4b4b4: Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffPoint-to-PointTa5d6ff"
Tff7b72elif Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMINGTb4b4b4: Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffRoamingTa5d6ff"
Tff7b72elif Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARYTb4b4b4: Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffBoundaryTa5d6ff"
Tff7b72elif Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAYTb4b4b4: Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffGatewayTa5d6ff"
Tff7b72elif Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_INTERNALTb4b4b4: Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffInternalTa5d6ff"
Tff7b72elseTb4b4b4: Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffFullTa5d6ff"
Tff7b72if Ta5d6ff"Ta5d6ffannounces_to_internalTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffannounces_to_internalTa5d6ff"Tb4b4b4]Tb4b4b4: Te6edf3modestr Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff (a>i)Ta5d6ff"

Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffclientsTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3clients Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffclientsTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffShared Instance[Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3cnum Tff7b72= Tffa657maxTb4b4b4(Te6edf3clientsTff7b72-T79c0ff1Tb4b4b4,T79c0ff0Tb4b4b4)
Tff7b72if Te6edf3cnum Tff7b72== T79c0ff1Tb4b4b4:
Te6edf3spec_str Tff7b72= Ta5d6ff"Ta5d6ff programTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3spec_str Tff7b72= Ta5d6ff"Ta5d6ff programsTa5d6ff"

Te6edf3clients_string Tff7b72= Ta5d6ff"Ta5d6ffServing : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cnumTb4b4b4)Tff7b72+Te6edf3spec_str
Tff7b72elif Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffI2PInterface[Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6ffi2p_connectableTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffi2p_connectableTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3cnum Tff7b72= Te6edf3clients
Tff7b72if Te6edf3cnum Tff7b72== T79c0ff1Tb4b4b4:
Te6edf3spec_str Tff7b72= Ta5d6ff"Ta5d6ff connected I2P endpointTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3spec_str Tff7b72= Ta5d6ff"Ta5d6ff connected I2P endpointsTa5d6ff"

Te6edf3clients_string Tff7b72= Ta5d6ff"Ta5d6ffPeers : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cnumTb4b4b4)Tff7b72+Te6edf3spec_str
Tff7b72elseTb4b4b4:
Te6edf3clients_string Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3clients_string Tff7b72= Ta5d6ff"Ta5d6ffClients : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3clientsTb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffblocked_ipsTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Te6edf3p Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffblocked_ipsTa5d6ff"Tb4b4b4] Tff7b72> T79c0ff0
Tff7b72if Te6edf3pTb4b4b4: Te6edf3clients_string Tff7b72+Tff7b72= Ta5d6ff"Tffea00\nTa5d6ff Blocked : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffblocked_ipsTa5d6ff"Tb4b4b4]Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff IPTa5d6ff"Tff7b72+Ta5d6ff"Ta5d6ffsTa5d6ff" Tff7b72if Te6edf3p Tff7b72else Ta5d6ff"Ta5d6ff"

Tff7b72elseTb4b4b4:
Te6edf3clients Tff7b72= Tff7b72None

Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Tffd700{n}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nTff7b72=Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffautoconnect_sourceTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffautoconnect_sourceTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Source : Auto-connect via <Tffd700{ns}Ta5d6ff>Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nsTff7b72=Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffautoconnect_sourceTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffifac_netnameTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffifac_netnameTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Network : Tffd700{nn}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nnTff7b72=Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffifac_netnameTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Status : Tffd700{ss}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3ssTff7b72=Te6edf3ssTb4b4b4)Tb4b4b4)

Tff7b72if Te6edf3clients Tff7b72!= Tff7b72None Tff7b72and Te6edf3clients_string Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3clients_stringTb4b4b4)

Tff7b72if Tff7b72not Tb4b4b4(Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffShared Instance[Ta5d6ff"Tb4b4b4) Tff7b72or Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffTCPInterface[ClientTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffLocalInterface[Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff Mode : Tffd700{Te6edf3modestrTffd700}Ta5d6ff"Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffbitrateTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffbitrateTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Rate : Tffd700{ss}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3ssTff7b72=Te6edf3speed_strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffbitrateTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffnoise_floorTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffinterferenceTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4: Te6edf3nstr Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3nf Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffinterferenceTa5d6ff"Tb4b4b4]
Te6edf3lstr Tff7b72= Ta5d6ff"Ta5d6ff, no interferenceTa5d6ff"
Tff7b72if Ta5d6ff"Ta5d6ffinterference_last_tsTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Ta5d6ff"Ta5d6ffinterference_last_dbmTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Te6edf3lago Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffinterference_last_tsTa5d6ff"Tb4b4b4]
Te6edf3ldbm Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffinterference_last_dbmTa5d6ff"Tb4b4b4]
Te6edf3lstr Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ff Intrfrnc. : Tffd700{Te6edf3ldbmTffd700}Ta5d6ff dBm Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3lagoTb4b4b4, Te6edf3compactTff7b72=Tff7b72TrueTb4b4b4)Tffd700}Ta5d6ff agoTa5d6ff"


Te6edf3nstr Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ff Intrfrnc. : Tffd700{Te6edf3nfTffd700}Ta5d6ff dBmTa5d6ff" Tff7b72if Te6edf3nf Tff7b72else Te6edf3lstr

Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffnoise_floorTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Noise Fl. : Tffd700{nfl}Ta5d6ff dBmTffd700{ntr}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nflTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffnoise_floorTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3ntrTff7b72=Te6edf3nstrTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Noise Fl. : UnknownTa5d6ff"Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffcpu_loadTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffcpu_loadTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff CPU load : Tffd700{v}Ta5d6ff Ta5d6ff%Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3vTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffcpu_loadTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff CPU load : UnknownTa5d6ff"Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffcpu_tempTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffcpu_tempTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff CPU temp : Tffd700{v}Ta5d6ff°CTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3vTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffcpu_tempTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff CPU load : UnknownTa5d6ff"Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffmem_loadTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffcpu_loadTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Mem usage : Tffd700{v}Ta5d6ff Ta5d6ff%Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3vTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffmem_loadTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Mem usage : UnknownTa5d6ff"Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffbattery_percentTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffbattery_percentTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3bpi Tff7b72= Tffa657intTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffbattery_percentTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3bss Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffbattery_stateTa5d6ff"Tb4b4b4]
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff Battery : Tffd700{Te6edf3bpiTffd700}Ta5d6ff% (Tffd700{Te6edf3bssTffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4)
Tff7b72exceptTb4b4b4:
Tff7b72pass

Tff7b72if Ta5d6ff"Ta5d6ffairtime_shortTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Ta5d6ff"Ta5d6ffairtime_longTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Airtime : Tffd700{ats}Ta5d6ff%Ta5d6ff (15s), Tffd700{atl}Ta5d6ff%Ta5d6ff (1h)Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3atsTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffairtime_shortTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,Te6edf3atlTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffairtime_longTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffchannel_load_shortTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Ta5d6ff"Ta5d6ffchannel_load_longTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Ch. Load : Tffd700{ats}Ta5d6ff%Ta5d6ff (15s), Tffd700{atl}Ta5d6ff%Ta5d6ff (1h)Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3atsTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffchannel_load_shortTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,Te6edf3atlTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffchannel_load_longTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffswitch_idTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffswitch_idTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Switch ID : Tffd700{v}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3vTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffswitch_idTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Switch ID : UnknownTa5d6ff"Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffendpoint_idTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffendpoint_idTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Endpoint : Tffd700{v}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3vTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffendpoint_idTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Endpoint : UnknownTa5d6ff"Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffvia_switch_idTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffvia_switch_idTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Via : Tffd700{v}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3vTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffvia_switch_idTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4: Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Via : UnknownTa5d6ff"Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffpeersTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffpeersTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Peers : Tffd700{np}Ta5d6ff reachableTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3npTff7b72=Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffpeersTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6fftunnelstateTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6fftunnelstateTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff I2P : Tffd700{ts}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3tsTff7b72=Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6fftunnelstateTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6ffifac_signatureTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffifac_signatureTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3sigstr Tff7b72= Ta5d6ff"Ta5d6ff<…Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffifac_signatureTa5d6ff"Tb4b4b4]Tb4b4b4[Tff7b72-T79c0ff5Tb4b4b4:Tb4b4b4]Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff>Ta5d6ff"
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Access : Tffd700{nb}Ta5d6ff-bit IFAC by Tffd700{sig}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nbTff7b72=Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffifac_sizeTa5d6ff"Tb4b4b4]Tff7b72*T79c0ff8Tb4b4b4, Te6edf3sigTff7b72=Te6edf3sigstrTb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffi2p_b32Ta5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffi2p_b32Ta5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff I2P B32 : Tffd700{ep}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3epTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffi2p_b32Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)

Tff7b72if Te6edf3astats Tff7b72and Ta5d6ff"Ta5d6ffannounce_queueTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffannounce_queueTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffannounce_queueTa5d6ff"Tb4b4b4] Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3aqn Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffannounce_queueTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3aqn Tff7b72== T79c0ff1Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Queued : Tffd700{np}Ta5d6ff announceTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3npTff7b72=Te6edf3aqnTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Queued : Tffd700{np}Ta5d6ff announcesTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3npTff7b72=Te6edf3aqnTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3astats Tff7b72and Ta5d6ff"Ta5d6ffheld_announcesTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffheld_announcesTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffheld_announcesTa5d6ff"Tb4b4b4] Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3aqn Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffheld_announcesTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3aqn Tff7b72== T79c0ff1Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Held : Tffd700{np}Ta5d6ff announceTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3npTff7b72=Te6edf3aqnTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Held : Tffd700{np}Ta5d6ff announcesTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3npTff7b72=Te6edf3aqnTb4b4b4)Tb4b4b4)

Te6edf3art Tff7b72= Tff7b72NoneTb4b4b4; Te6edf3arp Tff7b72= Tff7b72NoneTb4b4b4; Te6edf3arg Tff7b72= Tff7b72None
Tff7b72if Te6edf3astats Tff7b72and Ta5d6ff"Ta5d6ffannounce_rate_targetTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4: Te6edf3art Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffannounce_rate_targetTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3astats Tff7b72and Ta5d6ff"Ta5d6ffannounce_rate_penaltyTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4: Te6edf3arp Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffannounce_rate_penaltyTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3astats Tff7b72and Ta5d6ff"Ta5d6ffannounce_rate_graceTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4: Te6edf3arg Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffannounce_rate_graceTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3art Tff7b72and Te6edf3arp Tff7b72!= Tff7b72None Tff7b72and Te6edf3argTb4b4b4: Te6edf3art_str Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff(t:Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3artTb4b4b4)Tffd700}Ta5d6ff/p:Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3arpTb4b4b4)Tffd700}Ta5d6ff/g:Tffd700{Te6edf3argTffd700}Ta5d6ff)Ta5d6ff"
Tff7b72elif Te6edf3art Tff7b72and Te6edf3arp Tff7b72!= Tff7b72NoneTb4b4b4: Te6edf3art_str Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff(t:Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3artTb4b4b4)Tffd700}Ta5d6ff/p:Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3arpTb4b4b4)Tffd700}Ta5d6ff)Ta5d6ff"
Tff7b72elif Te6edf3artTb4b4b4: Te6edf3art_str Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff(t:Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3artTb4b4b4)Tffd700}Ta5d6ff)Ta5d6ff"
Tff7b72elseTb4b4b4: Te6edf3art_str Tff7b72= Ta5d6ff"Ta5d6ff"

Te6edf3burst_str Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Ta5d6ff"Ta5d6ffburst_activeTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffburst_activeTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3for_str Tff7b72= Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffburst_activatedTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3burst_str Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff burst for Tffd700{Te6edf3for_strTffd700}Ta5d6ff"
Te6edf3pburst_str Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Ta5d6ff"Ta5d6ffpr_burst_activeTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffpr_burst_activeTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3for_str Tff7b72= Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffpr_burst_activatedTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3pburst_str Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffburst for Tffd700{Te6edf3for_strTffd700}Ta5d6ff"
Te6edf3rxb_str Tff7b72= Ta5d6ff"Ta5d6ff↓Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettysizeTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffrxbTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3txb_str Tff7b72= Ta5d6ff"Ta5d6ff↑Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettysizeTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6fftxbTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3asr Tff7b72= Tff7b72False
Tff7b72if Te6edf3astats Tff7b72and Ta5d6ff"Ta5d6ffincoming_announce_frequencyTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffincoming_announce_frequencyTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3oan Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffoutgoing_announce_frequencyTa5d6ff"Tb4b4b4]
Te6edf3ian Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffincoming_announce_frequencyTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffShared Instance[Ta5d6ff"Tb4b4b4) Tff7b72and Te6edf3clients Tff7b72and Te6edf3clients Tff7b72> T79c0ff0Tb4b4b4: Te6edf3oan Tff7b72= Te6edf3oanTff7b72-Tb4b4b4(Te6edf3oanTff7b72/Te6edf3clientsTb4b4b4) T8b949e# Sub rnstatus own part
Te6edf3oaf Tff7b72= Te6edf3RNSTff7b72.Td2a8ffprettyfrequencyTb4b4b4(Te6edf3oanTb4b4b4, Te6edf3dTff7b72=T79c0ff1Tb4b4b4, Te6edf3lpfTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3iaf Tff7b72= Te6edf3RNSTff7b72.Td2a8ffprettyfrequencyTb4b4b4(Te6edf3ianTb4b4b4, Te6edf3dTff7b72=T79c0ff1Tb4b4b4, Te6edf3lpfTff7b72=Tff7b72TrueTb4b4b4)

Te6edf3cspec Tff7b72= Ta5d6ff"Ta5d6ffcTa5d6ff"
Tff7b72if Te6edf3clients Tff7b72== Tff7b72None Tff7b72and Ta5d6ff"Ta5d6ffpeersTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffpeersTa5d6ff"Tb4b4b4]Tb4b4b4: Te6edf3clients Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffpeersTa5d6ff"Tb4b4b4]Tb4b4b4; Te6edf3cspec Tff7b72= Ta5d6ff"Ta5d6ffpTa5d6ff"
Tff7b72if Te6edf3clients Tff7b72!= Tff7b72None Tff7b72and Te6edf3clients Tff7b72> T79c0ff0Tb4b4b4: Te6edf3pc_str Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyfrequencyTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff'Ta5d6ffoutgoing_announce_frequencyTa5d6ff'Tb4b4b4]Tff7b72/Te6edf3clientsTb4b4b4, Te6edf3dTff7b72=T79c0ff1Tb4b4b4, Te6edf3lpfTff7b72=Tff7b72TrueTb4b4b4)Tffd700}Ta5d6ff/Tffd700{Te6edf3cspecTffd700}Ta5d6ff"
Tff7b72elseTb4b4b4: Te6edf3pc_str Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3asr Tff7b72= Tff7b72True

Te6edf3psr Tff7b72= Tff7b72False
Tff7b72if Te6edf3pstats Tff7b72and Ta5d6ff"Ta5d6ffincoming_pr_frequencyTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffincoming_pr_frequencyTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3opn Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffoutgoing_pr_frequencyTa5d6ff"Tb4b4b4]
Te6edf3ipn Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffincoming_pr_frequencyTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffShared Instance[Ta5d6ff"Tb4b4b4) Tff7b72and Te6edf3clients Tff7b72and Te6edf3clients Tff7b72> T79c0ff0Tb4b4b4: Te6edf3opn Tff7b72= Te6edf3opnTff7b72-Tb4b4b4(Te6edf3opnTff7b72/Te6edf3clientsTb4b4b4) T8b949e# Sub rnstatus own part
Tff7b72if Te6edf3astatsTb4b4b4:
Te6edf3opf Tff7b72= Ta5d6ff"Ta5d6ff↑Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyfrequencyTb4b4b4(Te6edf3opnTb4b4b4, Te6edf3dTff7b72=T79c0ff1Tb4b4b4, Te6edf3lpfTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3ipf Tff7b72= Ta5d6ff"Ta5d6ff↓Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyfrequencyTb4b4b4(Te6edf3ipnTb4b4b4, Te6edf3dTff7b72=T79c0ff1Tb4b4b4, Te6edf3lpfTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3opf Tff7b72= Te6edf3RNSTff7b72.Td2a8ffprettyfrequencyTb4b4b4(Te6edf3opnTb4b4b4,Te6edf3dTff7b72=T79c0ff1Tb4b4b4, Te6edf3lpfTff7b72=Tff7b72TrueTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff↑Ta5d6ff"
Te6edf3ipf Tff7b72= Te6edf3RNSTff7b72.Td2a8ffprettyfrequencyTb4b4b4(Te6edf3ipnTb4b4b4,Te6edf3dTff7b72=T79c0ff1Tb4b4b4, Te6edf3lpfTff7b72=Tff7b72TrueTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff↓Ta5d6ff"
Te6edf3cspec Tff7b72= Ta5d6ff"Ta5d6ffcTa5d6ff"
Tff7b72if Te6edf3clients Tff7b72== Tff7b72None Tff7b72and Ta5d6ff"Ta5d6ffpeersTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffpeersTa5d6ff"Tb4b4b4]Tb4b4b4: Te6edf3clients Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffpeersTa5d6ff"Tb4b4b4]Tb4b4b4; Te6edf3cspec Tff7b72= Ta5d6ff"Ta5d6ffpTa5d6ff"
Tff7b72if Te6edf3clients Tff7b72!= Tff7b72None Tff7b72and Te6edf3clients Tff7b72> T79c0ff0Tb4b4b4: Te6edf3rpc_str Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyfrequencyTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff'Ta5d6ffoutgoing_pr_frequencyTa5d6ff'Tb4b4b4]Tff7b72/Te6edf3clientsTb4b4b4, Te6edf3dTff7b72=T79c0ff1Tb4b4b4, Te6edf3lpfTff7b72=Tff7b72TrueTb4b4b4)Tffd700}Ta5d6ff/Tffd700{Te6edf3cspecTffd700}Ta5d6ff"
Tff7b72elseTb4b4b4: Te6edf3rpc_str Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3psr Tff7b72= Tff7b72True

Tff7b72if Tff7b72not Te6edf3asrTb4b4b4: Te6edf3iaf Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4; Te6edf3oaf Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Te6edf3psrTb4b4b4: Te6edf3ipf Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4; Te6edf3opf Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3amlen Tff7b72= Tffa657maxTb4b4b4(Tffa657lenTb4b4b4(Te6edf3iafTb4b4b4)Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3oafTb4b4b4)Tb4b4b4)
Te6edf3iaf Tff7b72+Tff7b72= Tb4b4b4(Te6edf3amlenTff7b72-Tffa657lenTb4b4b4(Te6edf3iafTb4b4b4)Tb4b4b4)Tff7b72*Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Ta5d6ff"Ta5d6ff↓Ta5d6ff"
Te6edf3oaf Tff7b72+Tff7b72= Tb4b4b4(Te6edf3amlenTff7b72-Tffa657lenTb4b4b4(Te6edf3oafTb4b4b4)Tb4b4b4)Tff7b72*Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Ta5d6ff"Ta5d6ff↑Ta5d6ff"
Te6edf3mlen Tff7b72= Tffa657maxTb4b4b4(Tffa657maxTb4b4b4(Tffa657lenTb4b4b4(Te6edf3iafTb4b4b4)Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3oafTb4b4b4)Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3rxb_strTb4b4b4)Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3txb_strTb4b4b4)Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3ipfTb4b4b4)Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3opfTb4b4b4)Tb4b4b4)Tb4b4b4, T79c0ff10Tb4b4b4)
Te6edf3iaf Tff7b72+Tff7b72= Tb4b4b4(Te6edf3mlenTff7b72-Tffa657lenTb4b4b4(Te6edf3iafTb4b4b4)Tb4b4b4)Tff7b72*Ta5d6ff"Ta5d6ff Ta5d6ff"
Te6edf3oaf Tff7b72+Tff7b72= Tb4b4b4(Te6edf3mlenTff7b72-Tffa657lenTb4b4b4(Te6edf3oafTb4b4b4)Tb4b4b4)Tff7b72*Ta5d6ff"Ta5d6ff Ta5d6ff"
Te6edf3ipf Tff7b72+Tff7b72= Tb4b4b4(Te6edf3mlenTff7b72-Tffa657lenTb4b4b4(Te6edf3ipfTb4b4b4)Tb4b4b4)Tff7b72*Ta5d6ff"Ta5d6ff Ta5d6ff"
Te6edf3opf Tff7b72+Tff7b72= Tb4b4b4(Te6edf3mlenTff7b72-Tffa657lenTb4b4b4(Te6edf3opfTb4b4b4)Tb4b4b4)Tff7b72*Ta5d6ff"Ta5d6ff Ta5d6ff"
Te6edf3rxb_str Tff7b72+Tff7b72= Tb4b4b4(Te6edf3mlenTff7b72-Tffa657lenTb4b4b4(Te6edf3rxb_strTb4b4b4)Tb4b4b4)Tff7b72*Ta5d6ff"Ta5d6ff Ta5d6ff"
Te6edf3txb_str Tff7b72+Tff7b72= Tb4b4b4(Te6edf3mlenTff7b72-Tffa657lenTb4b4b4(Te6edf3txb_strTb4b4b4)Tb4b4b4)Tff7b72*Ta5d6ff"Ta5d6ff Ta5d6ff"

Tff7b72if Te6edf3psrTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff Path Rqs. : Tffd700{Te6edf3opfTffd700}Ta5d6ff Tffd700{Te6edf3rpc_strTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff Tffd700{Te6edf3ipfTffd700}Ta5d6ff Tffd700{Te6edf3pburst_strTffd700}Ta5d6ff"Tb4b4b4)

Tff7b72if Te6edf3asrTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff Announces : Tffd700{Te6edf3oafTffd700}Ta5d6ff Tffd700{Te6edf3pc_strTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff Tffd700{Te6edf3iafTffd700}Ta5d6ff Tffd700{Te6edf3art_strTffd700}Tffd700{Te6edf3burst_strTffd700}Ta5d6ff"Tb4b4b4)

Te6edf3rxstat Tff7b72= Te6edf3rxb_str
Te6edf3txstat Tff7b72= Te6edf3txb_str
Tff7b72if Ta5d6ff"Ta5d6ffrxsTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Ta5d6ff"Ta5d6fftxsTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Te6edf3rxstat Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyspeedTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffrxsTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3txstat Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyspeedTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6fftxsTa5d6ff"Tb4b4b4]Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff Traffic : Tffd700{Te6edf3txstatTffd700}Tffea00\nTa5d6ff Tffd700{Te6edf3rxstatTffd700}Ta5d6ff"Tb4b4b4)

Te6edf3lstr Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Te6edf3link_count Tff7b72!= Tff7b72None Tff7b72and Te6edf3lstatsTb4b4b4:
Te6edf3ms Tff7b72= Ta5d6ff"Ta5d6ffyTa5d6ff" Tff7b72if Te6edf3link_count Tff7b72== T79c0ff1 Tff7b72else Ta5d6ff"Ta5d6ffiesTa5d6ff"
Tff7b72if Ta5d6ff"Ta5d6fftransport_idTa5d6ff" Tff7b72in Te6edf3stats Tff7b72and Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6fftransport_idTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3lstr Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff, Tffd700{Te6edf3link_countTffd700}Ta5d6ff entrTffd700{Te6edf3msTffd700}Ta5d6ff in link tableTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3lstr Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff Tffd700{Te6edf3link_countTffd700}Ta5d6ff entrTffd700{Te6edf3msTffd700}Ta5d6ff in link tableTa5d6ff"

Tff7b72if Te6edf3traffic_totalsTb4b4b4:
Te6edf3rxb_str Tff7b72= Ta5d6ff"Ta5d6ff↓Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettysizeTb4b4b4(Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6ffrxbTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3txb_str Tff7b72= Ta5d6ff"Ta5d6ff↑Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettysizeTb4b4b4(Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6fftxbTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3strdiff Tff7b72= Tffa657lenTb4b4b4(Te6edf3rxb_strTb4b4b4)Tff7b72-Tffa657lenTb4b4b4(Te6edf3txb_strTb4b4b4)
Tff7b72if Te6edf3strdiff Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3txb_str Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72*Te6edf3strdiff
Tff7b72elif Te6edf3strdiff Tff7b72< T79c0ff0Tb4b4b4:
Te6edf3rxb_str Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72*Tff7b72-Te6edf3strdiff

Te6edf3rxstat Tff7b72= Te6edf3rxb_strTff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyspeedTb4b4b4(Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6ffrxsTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3txstat Tff7b72= Te6edf3txb_strTff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyspeedTb4b4b4(Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6fftxsTa5d6ff"Tb4b4b4]Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffea00\nTa5d6ff Totals : Tffd700{Te6edf3txstatTffd700}Tffea00\nTa5d6ff Tffd700{Te6edf3rxstatTffd700}Ta5d6ff"Tb4b4b4)

Tff7b72if Ta5d6ff"Ta5d6fftransport_idTa5d6ff" Tff7b72in Te6edf3stats Tff7b72and Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6fftransport_idTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff Transport Instance Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6fftransport_idTa5d6ff"Tb4b4b4]Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff runningTa5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffnetwork_idTa5d6ff" Tff7b72in Te6edf3stats Tff7b72and Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6ffnetwork_idTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Network Identity Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6ffnetwork_idTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffprobe_responderTa5d6ff" Tff7b72in Te6edf3stats Tff7b72and Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6ffprobe_responderTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Probe responder at Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6ffprobe_responderTa5d6ff"Tb4b4b4]Tb4b4b4)Tff7b72+ Ta5d6ff"Ta5d6ff activeTa5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6fftransport_uptimeTa5d6ff" Tff7b72in Te6edf3stats Tff7b72and Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6fftransport_uptimeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Uptime is Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6fftransport_uptimeTa5d6ff"Tb4b4b4]Tb4b4b4)Tff7b72+Te6edf3lstrTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3lstr Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffea00\nTffd700{Te6edf3lstrTffd700}Ta5d6ff"Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72not Te6edf3remoteTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffCould not get RNS statusTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffCould not get RNS status from remote transport instance Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3identity_hashTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3must_exitTb4b4b4:
Te6edf3exitTb4b4b4(T79c0ff2Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return

Tff7b72def Td2a8ffmainTb4b4b4(Te6edf3must_exitTff7b72=Tff7b72TrueTb4b4b4, Te6edf3rns_instanceTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3parser Tff7b72= Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4(Te6edf3descriptionTff7b72=Ta5d6ff"Ta5d6ffReticulum Network Stack StatusTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--configTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffpath to alternative Reticulum config directoryTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--versionTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4, Te6edf3versionTff7b72=Ta5d6ff"Ta5d6ffrnstatus Tffd700{version}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3versionTff7b72=Te6edf3__version__Tb4b4b4)Tb4b4b4)

Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-aTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--allTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffshow all interfacesTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-ATa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--announce-statsTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffshow announce statsTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-PTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--pr-statsTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffshow path request statsTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-lTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--link-statsTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffshow link statsTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-BTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--burstTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffonly show interfaces with active burstsTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-tTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--totalsTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffdisplay traffic totalsTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-sTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--sortTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffsort interfaces by [rate, traffic, rx, tx, rxs, txs, announces, arx, atx, prx, ptx, held]Ta5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-rTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--reverseTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffreverse sortingTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-jTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--jsonTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffoutput in JSON formatTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-RTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3metavarTff7b72=Ta5d6ff"Ta5d6ffhashTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6fftransport identity hash of remote instance to get status fromTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-iTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3metavarTff7b72=Ta5d6ff"Ta5d6ffpathTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffpath to identity used for remote managementTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-wTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3metavarTff7b72=Ta5d6ff"Ta5d6ffsecondsTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6fftimeout before giving up on remote queriesTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffPATH_REQUEST_TIMEOUTTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-dTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--discoveredTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6fflist discovered interfacesTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-DTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffshow details and config entries for discovered interfacesTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-mTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--monitorTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffcontinuously monitor statusTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-ITa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--monitor-intervalTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3metavarTff7b72=Ta5d6ff"Ta5d6ffsecondsTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffrefresh interval for monitor mode (default: 1)Ta5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=T79c0ff1.0Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff'Ta5d6ff-vTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--verboseTa5d6ff'Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff'Ta5d6ffcountTa5d6ff'Tb4b4b4, Te6edf3defaultTff7b72=T79c0ff0Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6fffilterTa5d6ff"Tb4b4b4, Te6edf3nargsTff7b72=Ta5d6ff"Ta5d6ff?Ta5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffonly display interfaces with names including filterTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Te6edf3args Tff7b72= Te6edf3parserTff7b72.Td2a8ffparse_argsTb4b4b4(Tb4b4b4)

Tff7b72if Te6edf3argsTff7b72.Td2a8ffconfigTb4b4b4: Te6edf3configarg Tff7b72= Te6edf3argsTff7b72.Td2a8ffconfig
Tff7b72elseTb4b4b4: Te6edf3configarg Tff7b72= Tff7b72None

Tff7b72if Te6edf3argsTff7b72.Td2a8ffmonitorTb4b4b4:
Tff7b72if Te6edf3argsTff7b72.Td2a8ffRTb4b4b4: Te6edf3require_shared Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4: Te6edf3require_shared Tff7b72= Tff7b72True
Tff7b72tryTb4b4b4: Te6edf3reticulum Tff7b72= Te6edf3RNSTff7b72.Td2a8ffReticulumTb4b4b4(Te6edf3configdirTff7b72=Te6edf3configargTb4b4b4, Te6edf3loglevelTff7b72=T79c0ff3Tff7b72+Te6edf3argsTff7b72.Td2a8ffverboseTb4b4b4, Te6edf3require_shared_instanceTff7b72=Te6edf3require_sharedTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffNo shared RNS instance available to get status fromTa5d6ff"Tb4b4b4)
Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)

Tff7b72while Tff7b72TrueTb4b4b4:
Te6edf3st Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3buffer Tff7b72= Te6edf3ioTff7b72.Td2a8ffStringIOTb4b4b4(Tb4b4b4)
Te6edf3old_stdout Tff7b72= Te6edf3sysTff7b72.Td2a8ffstdout
Te6edf3sysTff7b72.Td2a8ffstdout Tff7b72= Te6edf3buffer
Tff7b72tryTb4b4b4:
Te6edf3program_setupTb4b4b4(Te6edf3configdir Tff7b72= Te6edf3configargTb4b4b4, Te6edf3dispall Tff7b72= Te6edf3argsTff7b72.Td2a8ffallTb4b4b4, Te6edf3verbosityTff7b72=Te6edf3argsTff7b72.Td2a8ffverboseTb4b4b4, Te6edf3name_filterTff7b72=Te6edf3argsTff7b72.Td2a8fffilterTb4b4b4, Te6edf3jsonTff7b72=Te6edf3argsTff7b72.Td2a8ffjsonTb4b4b4,
Te6edf3astatsTff7b72=Te6edf3argsTff7b72.Td2a8ffannounce_statsTb4b4b4, Te6edf3pstatsTff7b72=Te6edf3argsTff7b72.Td2a8ffpr_statsTb4b4b4, Te6edf3lstatsTff7b72=Te6edf3argsTff7b72.Td2a8fflink_statsTb4b4b4, Te6edf3sortingTff7b72=Te6edf3argsTff7b72.Td2a8ffsortTb4b4b4, Te6edf3sort_reverseTff7b72=Te6edf3argsTff7b72.Td2a8ffreverseTb4b4b4,
Te6edf3remoteTff7b72=Te6edf3argsTff7b72.Td2a8ffRTb4b4b4, Te6edf3management_identityTff7b72=Te6edf3argsTff7b72.Td2a8ffiTb4b4b4, Te6edf3remote_timeoutTff7b72=Te6edf3argsTff7b72.Td2a8ffwTb4b4b4, Te6edf3must_exitTff7b72=Tff7b72FalseTb4b4b4, Te6edf3rns_instanceTff7b72=Te6edf3reticulumTb4b4b4,
Te6edf3traffic_totalsTff7b72=Te6edf3argsTff7b72.Td2a8fftotalsTb4b4b4, Te6edf3discovered_interfacesTff7b72=Te6edf3argsTff7b72.Td2a8ffdiscoveredTb4b4b4, Te6edf3config_entriesTff7b72=Te6edf3argsTff7b72.Td2a8ffDTb4b4b4, Te6edf3burst_filterTff7b72=Te6edf3argsTff7b72.Td2a8ffburstTb4b4b4)
Tff7b72finallyTb4b4b4:
Te6edf3sysTff7b72.Td2a8ffstdout Tff7b72= Te6edf3old_stdout
Te6edf3output Tff7b72= Te6edf3bufferTff7b72.Td2a8ffgetvalueTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\033Ta5d6ff[HTffea00\033Ta5d6ff[2JTa5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Te6edf3outputTb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3flushTff7b72=Tff7b72TrueTb4b4b4)

Te6edf3td Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3st
Te6edf3sleeptime Tff7b72= Tffa657maxTb4b4b4(Te6edf3argsTff7b72.Td2a8ffmonitor_intervalTff7b72-Te6edf3tdTb4b4b4, T79c0ff0.2Tb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3sleeptimeTb4b4b4)

Tff7b72elseTb4b4b4:
Te6edf3program_setupTb4b4b4(Te6edf3configdir Tff7b72= Te6edf3configargTb4b4b4, Te6edf3dispall Tff7b72= Te6edf3argsTff7b72.Td2a8ffallTb4b4b4, Te6edf3verbosityTff7b72=Te6edf3argsTff7b72.Td2a8ffverboseTb4b4b4, Te6edf3name_filterTff7b72=Te6edf3argsTff7b72.Td2a8fffilterTb4b4b4, Te6edf3jsonTff7b72=Te6edf3argsTff7b72.Td2a8ffjsonTb4b4b4,
Te6edf3astatsTff7b72=Te6edf3argsTff7b72.Td2a8ffannounce_statsTb4b4b4, Te6edf3pstatsTff7b72=Te6edf3argsTff7b72.Td2a8ffpr_statsTb4b4b4, Te6edf3lstatsTff7b72=Te6edf3argsTff7b72.Td2a8fflink_statsTb4b4b4, Te6edf3sortingTff7b72=Te6edf3argsTff7b72.Td2a8ffsortTb4b4b4, Te6edf3sort_reverseTff7b72=Te6edf3argsTff7b72.Td2a8ffreverseTb4b4b4,
Te6edf3remoteTff7b72=Te6edf3argsTff7b72.Td2a8ffRTb4b4b4, Te6edf3management_identityTff7b72=Te6edf3argsTff7b72.Td2a8ffiTb4b4b4, Te6edf3remote_timeoutTff7b72=Te6edf3argsTff7b72.Td2a8ffwTb4b4b4, Te6edf3must_exitTff7b72=Te6edf3must_exitTb4b4b4, Te6edf3rns_instanceTff7b72=Te6edf3rns_instanceTb4b4b4,
Te6edf3traffic_totalsTff7b72=Te6edf3argsTff7b72.Td2a8fftotalsTb4b4b4, Te6edf3discovered_interfacesTff7b72=Te6edf3argsTff7b72.Td2a8ffdiscoveredTb4b4b4, Te6edf3config_entriesTff7b72=Te6edf3argsTff7b72.Td2a8ffDTb4b4b4, Te6edf3burst_filterTff7b72=Te6edf3argsTff7b72.Td2a8ffburstTb4b4b4)

Tff7b72except Tf85149KeyboardInterruptTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3must_exitTb4b4b4: Te6edf3exitTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72return

Tff7b72def Td2a8ffspeed_strTb4b4b4(Te6edf3numTb4b4b4, Te6edf3suffixTff7b72=Ta5d6ff'Ta5d6ffbpsTa5d6ff'Tb4b4b4)Tb4b4b4:
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffkTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'

Tff7b72if Te6edf3suffix Tff7b72== Ta5d6ff'Ta5d6ffBpsTa5d6ff'Tb4b4b4:
Te6edf3num Tff7b72/Tff7b72= T79c0ff8
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffKTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'

Tff7b72for Te6edf3unit Tff7b72in Te6edf3unitsTb4b4b4:
Tff7b72if Tffa657absTb4b4b4(Te6edf3numTb4b4b4) Tff7b72< T79c0ff1000.0Tb4b4b4:
Tff7b72return Ta5d6ff"Tffd700%3.2fTa5d6ff Tffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3unitTb4b4b4, Te6edf3suffixTb4b4b4)
Te6edf3num Tff7b72/Tff7b72= T79c0ff1000.0

Tff7b72return Ta5d6ff"Tffd700%.2fTa5d6ff Tffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3last_unitTb4b4b4, Te6edf3suffixTb4b4b4)

Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3mainTb4b4b4(Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────